package com.mylogger;

public class MyLogger {
	
	private AsyncFileAppender appender;
	private MyLogLevel level;
	
	public MyLogger() {
		appender = AsyncFileAppender.getInstance();
		this.level = MyLogLevel.INFO;
	}
	
	
	public void info(String msg){
		if ( !level.isGreaterOrEqual(MyLogLevel.INFO) ){
			appender.addMessage("[INFO] " + AsyncFileAppender.getCurrentDate() + " " + msg);
		}
	}
	
	public void info(String msg, Object o){
		if ( !level.isGreaterOrEqual(MyLogLevel.INFO) ){
			String modifiedMsg = insertObject(msg,o);
			appender.addMessage("[INFO] " + AsyncFileAppender.getCurrentDate() + " " + modifiedMsg);
		}
	}
	
	public void debug(String msg){
		if (!level.isGreaterOrEqual(MyLogLevel.DEBUG)) {
			appender.addMessage("[DEBUG] " + AsyncFileAppender.getCurrentDate()
					+ " " + msg);
		}
	}
	
	public void debug(String msg, Object o){
		if (!level.isGreaterOrEqual(MyLogLevel.DEBUG)) {
			String modifiedMsg = insertObject(msg, o);
			appender.addMessage("[DEBUG] " + AsyncFileAppender.getCurrentDate()
					+ " " + modifiedMsg);
		}
	}
	
	
	public void error(String msg){
		if ( level.isGreaterOrEqual(MyLogLevel.ERROR) ) {
			appender.addMessage("[ERROR] " + AsyncFileAppender.getCurrentDate()
					+ " " + msg);
		}
	}
	
	public void error(String msg, Object o){
		if (!level.isGreaterOrEqual(MyLogLevel.ERROR)) {
			String modifiedMsg = insertObject(msg, o);
			appender.addMessage("[ERROR] " + AsyncFileAppender.getCurrentDate()
					+ " " + modifiedMsg);
		}
	}
	
	public String insertObject(String msg,Object o){
		return msg.replaceFirst("\\{\\}", o.toString());
	}
	
	public void setLevel(MyLogLevel level) {
		this.level = level;
	}

	public MyLogLevel getLevel() {
		return level;
	}
	
	public boolean isInfoEnabled() {
		return level.isLowerOrEqual(MyLogLevel.INFO);
	}
	
	public boolean isErrorEnabled() {
		return level.isLowerOrEqual(MyLogLevel.ERROR);
	}
	
	public boolean isDebugEnabled() {
		return level.isLowerOrEqual(MyLogLevel.DEBUG);
	}
}
